#!/usr/bin/env python
# -*- coding: utf-8 -*-

#TODO: Tratar o erro caso o numero do capitulo/versiculo nao exista
#TODO: Modularizar melhor

import os,sys
from xml.dom import minidom
from PyQt4 import QtCore,QtGui
from fullscreen_ui import Ui_fullscreen

print "Carregando biblia..."
bible = minidom.parse('biblia.xml')
livros = bible.firstChild

# Create a class for our main window
class Main(QtGui.QMainWindow):
    def __init__(self):
	QtGui.QMainWindow.__init__(self)
	# This is always the same
	self.ui=Ui_fullscreen()
	self.ui.setupUi(self)
	lista_livros = open('id_livros.txt')
	count=1
	for item in lista_livros.readlines():
		self.ui.cb_livro.insertItem(count, item.strip("\n").encode('latin-1'))
		count=count+1
	
# Conexões
	QtCore.QObject.connect(self.ui.bt_full,QtCore.SIGNAL("clicked()"), self.mostra_full)
	QtCore.QObject.connect(self.ui.bt_proximo,QtCore.SIGNAL("clicked()"), self.proximo)
	QtCore.QObject.connect(self.ui.bt_anterior,QtCore.SIGNAL("clicked()"), self.anterior)
	QtCore.QObject.connect(self.ui.bt_sair,QtCore.SIGNAL("clicked()"), self.sair)

# Metodos personalizados (slots para os sinais)
    def mostra_full(self):
	livro 	  = self.ui.cb_livro.currentIndex()+1
	capitulo  = self.ui.sb_capitulo.value()
	versiculo = self.ui.sb_versiculo.value()
	
	texto = livros.childNodes[(livro*2)-1].childNodes[(capitulo*2)-1].childNodes[(versiculo*2)-1].firstChild.data.encode('latin-1')
	self.ui.versiculo.setText(str(texto))
	#TODO: Estabelecer regras para o tamanho do texto
	#print len(str(texto))
	
	nome_livro = livros.childNodes[(livro*2)-1].attributes["bname"].value
	titulo = nome_livro.encode('latin-1')+" "+str(capitulo)+":"+str(versiculo)
	self.ui.referencia.setText(str(titulo))
	
	if self.isFullScreen() == False:
	  self.move(0,0)
	  #TODO: Inverter a logica caso a coordenada seja ao contrario (primario 0,0)
	  #TODO: Verificar por above/below e left/right e usar width no ultimo caso
	  self.showFullScreen()
	  self.ui.cb_livro.hide()
	  self.ui.sb_capitulo.hide()
	  self.ui.sb_versiculo.hide()
	  #self.ui.bt_full.hide()
	  self.setCursor(QtCore.Qt.BlankCursor)
	else:
	  screen_height = QtGui.QDesktopWidget().screenGeometry().height()
	  screen_width = QtGui.QDesktopWidget().screenGeometry().width()
	  self.showMaximized()
	  #self.resize(int(float(screen_width)/1.5),int(float(screen_height)/1.5))
	  size =  self.geometry()
          self.move((screen_width-size.width())/2, screen_height+(screen_height-size.height())/2)
	  # TODO COlocar o versiculo em foco
	  self.ui.cb_livro.show()
	  self.ui.sb_capitulo.show()
	  self.ui.sb_versiculo.show()
	  self.ui.cb_livro.setFocus()
	  #self.ui.bt_full.hide()
	  self.setCursor(QtCore.Qt.ArrowCursor)
	  
    def proximo(self):
      #TODO: Passar ao próximo livro e capítulo
	self.ui.sb_capitulo.show()
	self.ui.sb_versiculo.show()

	capitulo  = self.ui.sb_capitulo.value()
	versiculo = self.ui.sb_versiculo.value()
	self.ui.sb_versiculo.setValue(int(versiculo)+1)
	versiculo = self.ui.sb_versiculo.value()
	livro 	  = self.ui.cb_livro.currentIndex()+1
	nome_livro = livros.childNodes[(livro*2)-1].attributes["bname"].value
	
	try:
	  texto = livros.childNodes[(livro*2)-1].childNodes[(capitulo*2)-1].childNodes[(versiculo*2)-1].firstChild.data.encode('latin-1')
	except IndexError:
	  self.ui.sb_capitulo.setValue(int(capitulo)+1)
	  self.ui.sb_versiculo.setValue(1)
	  livro = self.ui.cb_livro.currentIndex()+1
	  capitulo  = self.ui.sb_capitulo.value()
	  versiculo = self.ui.sb_versiculo.value()
	  texto = livros.childNodes[(livro*2)-1].childNodes[(capitulo*2)-1].childNodes[(versiculo*2)-1].firstChild.data.encode('latin-1')

	self.ui.versiculo.setText(str(texto))
	titulo = nome_livro.encode('latin-1')+" "+str(capitulo)+":"+str(versiculo)
	self.ui.referencia.setText(str(titulo))
	
	if self.isFullScreen() == True:
	  self.ui.sb_capitulo.hide()
	  self.ui.sb_versiculo.hide()

	
    def anterior(self):
      #TODO: Passar ao capitulo e ao livro anterior
	self.ui.sb_capitulo.show()
	self.ui.sb_versiculo.show()
	capitulo  = self.ui.sb_capitulo.value()
	versiculo = self.ui.sb_versiculo.value()
	livro 	  = self.ui.cb_livro.currentIndex()+1
	nome_livro = livros.childNodes[(livro*2)-1].attributes["bname"].value
		
	if int(versiculo) == 1:
	  qtde_vers_cap_ant = ((livros.childNodes[(livro*2)-1].childNodes[capitulo*2-3].childNodes.length-1)/2)
	  self.ui.sb_capitulo.setValue(capitulo-1)
	  self.ui.sb_versiculo.setValue(int(qtde_vers_cap_ant))
	  
	  capitulo  = self.ui.sb_capitulo.value()
	  versiculo = self.ui.sb_versiculo.value()
	  livro 	  = self.ui.cb_livro.currentIndex()+1
	  nome_livro = livros.childNodes[(livro*2)-1].attributes["bname"].value

	else:
	  self.ui.sb_versiculo.setValue(int(versiculo)-1)
	  
	  capitulo  = self.ui.sb_capitulo.value()
	  versiculo = self.ui.sb_versiculo.value()
	  livro 	  = self.ui.cb_livro.currentIndex()+1
	  nome_livro = livros.childNodes[(livro*2)-1].attributes["bname"].value
	
	texto = livros.childNodes[(livro*2)-1].childNodes[(capitulo*2)-1].childNodes[(versiculo*2)-1].firstChild.data.encode('latin-1')
	
	self.ui.versiculo.setText(str(texto))
	titulo = nome_livro.encode('latin-1')+" "+str(capitulo)+":"+str(versiculo)
	self.ui.referencia.setText(str(titulo))
	
	if self.isFullScreen() == True:
	  self.ui.sb_capitulo.hide()
	  self.ui.sb_versiculo.hide()


    def sair(self):
	sys.exit()
	
	

def main():
    app = QtGui.QApplication(sys.argv)
    window=Main()
    window.showMaximized()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
